package ar.uba.fi.tonyvaliente.utils;

import java.util.BitSet;

/**
 * Clase de metodos utilitarios para trabajar con <code>BitSet</code>s
 * @author dmorello
 */
public final class BitSetUtils {

	/**
	 * Devuelve un BitSet que resulta de concatenar los recibidos por parametro.
	 * @param bs1 un BitSet cualquiera
	 * @param bs2 un BitSet cualquiera
	 * @return BitSet resultante de concatenar <code>bs1</code> y <code>bs2</code>
	 * @throws NullPointerException si <code>bs1</code> es null
	 * o si <code>bs2</code> es null.
	 */
	public static BitSet concat(BitSet bs1, BitSet bs2) {
		BitSet returnValue = null;
		returnValue = new BitSet(bs1.size() + bs2.size());
		for (int i = 0; i < returnValue.size(); i++) {
			if (i < bs1.size()) {
				returnValue.set(i, bs1.get(i));
			} else {
				returnValue.set(i, bs2.get(i-bs1.size()));
			}
		}
		return returnValue;
	}
	
	/**
	 * Devuelve un String con ceros y unos que representan
	 * el contenido de un BitSet. 
	 * @param bs Un BitSet cualquiera
	 * @return String con ceros y unos que representan
	 * el contenido del BitSet <code>bs</code>.
	 */
	public static String toBinaryString(BitSet bs) {
		char[] str = new char[bs.size()];
		for (int i = 0; i < bs.size(); i++) {
			str[i] = (bs.get(i))? '1' : '0';
		}
		return new String(str);
	}
	
	
	private BitSetUtils() {}
}
